🎖️GitЯра🎖️
src/helpers/ui/MomentaryButton.cpp 5732b2edd8563281ef7d344cd6517f969ca160ab (5732b2ed) Text, 3.84 KB
Tff7b72#Tff7b72include T8b949e"MomentaryButton.h"
Tff7b72#Tff7b72define MULTI_CLICK_WINDOW_MS 280
Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3MomentaryButtonTb4b4b4(Tffa657int8_t Te6edf3pinTb4b4b4, Tffa657int Te6edf3long_press_millisTb4b4b4, Tffa657bool Te6edf3reverseTb4b4b4, Tffa657bool Te6edf3pulldownupTb4b4b4, Tffa657bool Te6edf3multiclickTb4b4b4) Tb4b4b4{
Te6edf3_pin Tff7b72= Te6edf3pinTb4b4b4;
Te6edf3_reverse Tff7b72= Te6edf3reverseTb4b4b4;
Te6edf3_pull Tff7b72= Te6edf3pulldownupTb4b4b4;
Te6edf3down_at Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3prev Tff7b72= Te6edf3_reverse Tff7b72? Te6edf3HIGH Tff7b72: Te6edf3LOWTb4b4b4;
Te6edf3cancel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_long_millis Tff7b72= Te6edf3long_press_millisTb4b4b4;
Te6edf3_threshold Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_multi_click_window Tff7b72= Te6edf3multiclick Tff7b72? Te6edf3MULTI_CLICK_WINDOW_MS Tff7b72: T79c0ff0Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3MomentaryButtonTb4b4b4(Tffa657int8_t Te6edf3pinTb4b4b4, Tffa657int Te6edf3long_press_millisTb4b4b4, Tffa657int Te6edf3analog_thresholdTb4b4b4) Tb4b4b4{
Te6edf3_pin Tff7b72= Te6edf3pinTb4b4b4;
Te6edf3_reverse Tff7b72= Tffa657falseTb4b4b4;
Te6edf3_pull Tff7b72= Tffa657falseTb4b4b4;
Te6edf3down_at Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3prev Tff7b72= Te6edf3LOWTb4b4b4;
Te6edf3cancel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_long_millis Tff7b72= Te6edf3long_press_millisTb4b4b4;
Te6edf3_threshold Tff7b72= Te6edf3analog_thresholdTb4b4b4;
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_multi_click_window Tff7b72= Te6edf3MULTI_CLICK_WINDOW_MSTb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3beginTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_pin Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3_threshold Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3pinModeTb4b4b4(Te6edf3_pinTb4b4b4, Te6edf3_pull Tff7b72? Tb4b4b4(Te6edf3_reverse Tff7b72? Te6edf3INPUT_PULLUP Tff7b72: Te6edf3INPUT_PULLDOWNTb4b4b4) Tff7b72: Te6edf3INPUTTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3isPressedTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tffa657int Te6edf3btn Tff7b72= Te6edf3_threshold Tff7b72> T79c0ff0 Tff7b72? Tb4b4b4(Te6edf3analogReadTb4b4b4(Te6edf3_pinTb4b4b4) Tff7b72< Te6edf3_thresholdTb4b4b4) Tff7b72: Te6edf3digitalReadTb4b4b4(Te6edf3_pinTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3isPressedTb4b4b4(Te6edf3btnTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3cancelClickTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3cancel Tff7b72= T79c0ff1Tb4b4b4;
Te6edf3down_at Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3isPressedTb4b4b4(Tffa657int Te6edf3levelTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_threshold Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3levelTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_reverseTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3level Tff7b72=Tff7b72= Te6edf3LOWTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Te6edf3level Tff7b72!Tff7b72= Te6edf3LOWTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657int Te6edf3MomentaryButtonTff7b72:Tff7b72:Te6edf3checkTb4b4b4(Tffa657bool Te6edf3repeat_clickTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_pin Tff7b72< T79c0ff0Tb4b4b4) Tff7b72return Te6edf3BUTTON_EVENT_NONETb4b4b4;
Tffa657int Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_NONETb4b4b4;
Tffa657int Te6edf3btn Tff7b72= Te6edf3_threshold Tff7b72> T79c0ff0 Tff7b72? Tb4b4b4(Te6edf3analogReadTb4b4b4(Te6edf3_pinTb4b4b4) Tff7b72< Te6edf3_thresholdTb4b4b4) Tff7b72: Te6edf3digitalReadTb4b4b4(Te6edf3_pinTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3btn Tff7b72!Tff7b72= Te6edf3prevTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isPressedTb4b4b4(Te6edf3btnTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3down_at Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// button UP
Tff7b72if Tb4b4b4(Te6edf3_long_millis Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3down_at Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tb4b4b4(Tffa657unsigned Tffa657longTb4b4b4)Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3down_atTb4b4b4) Tff7b72< Te6edf3_long_millisTb4b4b4) Tb4b4b4{ T8b949e// only a CLICK if still within the long_press millis
Te6edf3_click_countTff7b72+Tff7b72+Tb4b4b4;
Te6edf3_last_click_time Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3_click_countTff7b72+Tff7b72+Tb4b4b4;
Te6edf3_last_click_time Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3event Tff7b72=Tff7b72= Te6edf3BUTTON_EVENT_CLICK Tff7b72&Tff7b72& Te6edf3cancelTb4b4b4) Tb4b4b4{
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_NONETb4b4b4;
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Te6edf3down_at Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3prev Tff7b72= Te6edf3btnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isPressedTb4b4b4(Te6edf3btnTb4b4b4) Tff7b72&Tff7b72& Te6edf3cancelTb4b4b4) Tb4b4b4{ T8b949e// always clear the pending 'cancel' once button is back in UP state
Te6edf3cancel Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_long_millis Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Te6edf3down_at Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tb4b4b4(Tffa657unsigned Tffa657longTb4b4b4)Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3down_atTb4b4b4) Tff7b72>Tff7b72= Te6edf3_long_millisTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_pending_clickTb4b4b4) Tb4b4b4{
T8b949e// long press during multi-click detection - cancel pending clicks
Te6edf3cancelClickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_LONG_PRESSTb4b4b4;
Te6edf3down_at Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3down_at Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Te6edf3repeat_clickTb4b4b4) Tb4b4b4{
Tffa657unsigned Tffa657long Te6edf3diff Tff7b72= Tb4b4b4(Tffa657unsigned Tffa657longTb4b4b4)Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3down_atTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3diff Tff7b72>Tff7b72= T79c0ff700Tb4b4b4) Tb4b4b4{
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_CLICKTb4b4b4; T8b949e// wait 700 millis before repeating the click events
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_pending_click Tff7b72&Tff7b72& Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3_last_click_timeTb4b4b4) Tff7b72>Tff7b72= Te6edf3_multi_click_windowTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3down_at Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// still pressed - wait for button release before processing clicks
Tff7b72return Te6edf3eventTb4b4b4;
Tb4b4b4}
Tff7b72switch Tb4b4b4(Te6edf3_click_countTb4b4b4) Tb4b4b4{
Tff7b72case T79c0ff1Tb4b4b4:
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_CLICKTb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff2Tb4b4b4:
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_DOUBLE_CLICKTb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff3Tb4b4b4:
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_TRIPLE_CLICKTb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
T8b949e// For 4+ clicks, treat as triple click?
Te6edf3event Tff7b72= Te6edf3BUTTON_EVENT_TRIPLE_CLICKTb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Te6edf3_click_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_last_click_time Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_pending_click Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3eventTb4b4b4;
Tb4b4b4}
Served by rngit 1.5.2 - Generated in 0.05s